#include <iostream>
#include <cstdio>
#include <deque>

using namespace std;
int a[1000100];
class upQueue: deque<int>
{
    public:
    void pop(int pos)
    {
        while(!empty()&&front()<pos) pop_front();
    }
    void push(int pos)
    {
        while(!empty()&&a[pos]<a[back()]) pop_back();
        push_back(pos);
    }
    int top(){return a[front()];}
};
class downQueue: deque<int>
{
    public:
    void pop(int pos)
    {
        while(!empty()&&front()<pos) pop_front();
    }
    void push(int pos)
    {
        while(!empty()&&a[pos]>a[back()]) pop_back();
        push_back(pos);
    }
    int top(){return a[front()];}
};
int resMax[1000100],resMin[1000100];
int main()
{
    int n,k;
    while(cin>>n>>k)
    {
        upQueue uq;
        downQueue dq;
        for(int i=0;i<n;i++)scanf("%d",a+i);
        for(int i=0;i<n;i++)
        {
            uq.push(i);
            dq.push(i);
            if(i-k+1>=0)
            {
                uq.pop(i-k+1);
                dq.pop(i-k+1);
                resMax[i]=dq.top();
                resMin[i]=uq.top();
            }
        }
        for(int i=k-1;i<n;i++)
        {
            printf("%d ",resMin[i]);
        }
        cout<<endl;
        for(int i=k-1;i<n;i++)
        {
            printf("%d ",resMax[i]);
        }
        cout<<endl;
    }
    return 0;
}

